// 原生模块类型

type NoopFnType = () => void;
type P<T> = Promise<T>;
type PFn<T = any> = () => P<T>;

/** app版本信息 */
export type AppInfoType = {
  /** 版本名称 */
  versionName: string;
  /** 版本code */
  versionCode: number;
  /** 应用包名 */
  packageName: string;
  /** 应用打包日期 */
  buildDate: string;
};

/** 分辨率信息 */
export type PixelType = {
  width: number;
  height: number;
};

/** Module 模块 */
export type nativeModuletype = {
  /** 原生调试事件key */
  LOG_EVENT_KEY: string;
  /** 二维码扫描结果事件key */
  SCAN_RESULT_EVENT_KEY: string;
  /** 二维码扫描结果数据key */
  SCAN_RESULT_DATA_KEY: string;
  /** 原生 Toast 封装, 效果同 ToastAndroid 模块 */
  showToast: (msg: string) => void;

  /** 测试 */
  test: () => P<void>;

  /** 跳转到扫码页面 */
  gotoScanQrCode: () => void;

  /** 获取app版本信息 */
  getAppInfo: PFn<AppInfoType | null>;

  /** 获取设备的分辨率 */
  getPixel: PFn<PixelType | null>;

  /** 启动系统 Activity */
  actionViewIntent: (url: string, extType: "png" | "text" | "apk" | "jpeg" | "mp4") => P<string | null>;

  /** 执行shell */
  execShell: (
    /** 执行的命令 */
    cmd: string,
    /** 是否是 root 执行 */
    isRoot: boolean
  ) => P<{
    /** 退出码 */
    exitValue: number;
    /** 响应 */
    stdout: string;
    /** 错误 */
    stderr: string;
  } | null>;

  /** 判断是否已经 root */
  isRoot: PFn<boolean>;

  /** 关机 */
  shutdown: PFn<string | null>;

  /** 重启 */
  reboot: PFn<string | null>;

  /** 修改系统时间 */
  setSystemTime: (time: string) => P<string | null>;

  /** 重启App */
  restartApp: NoopFnType;
};

/** AudioManage 模块(控制音量) */
export type AudioManageType = {
  /** 获取系统音量 */
  getCurrentVolume: PFn<number | null>;
  /** 设置系统音量 */
  setCurrentVolume: (num: number) => P<string | null>;
};

/** LuminanceManage 模块(控制设备亮度) */
export type LuminanceManageType = {
  /** 获取亮度 */
  getLuminance: PFn<number | null>;
  /** 设置亮度 */
  setLuminance: (num: number) => P<string | null>;
};
